\chapter{单一用户}
\section{简介}

如果你之前阅读过该部分或者被说服来尝试一下，你会想要将你的项目放到Fossil的软件控制之中。这个章节的目的是带领你完成这个任务且想你暂时如何适应在使用该工作来进行开发工作。该章节的假设是你这个仓库的唯一用户，你是这个项目的设计者、开发者和维护者。当你很舒适地使用这个工具后，下一个章节将会想你展示如何在多个用户在同一个项目上进行工作时如果使用它。


\section{创建一个仓库}


\subsection{简介}

在``吃狗粮''（俚语：软件公司俚语，指用自己的产品本身来说明产品的质量和能力）精神下，我们将使用这个本作为一个使用Fossil来管理的项目。这本书是由一个文件夹内的文本文件组成(我们使用的工具是： \LyX{} \cite{LyX})，我的工作目录结构如下:
\begin{lyxcode}
{\scriptsize FOSSIL/}{\scriptsize \par}
\begin{lyxcode}
{\scriptsize 这个文件夹保存了我所有的Fossil仓库}{\scriptsize \par}
\end{lyxcode}
{\scriptsize FossilBook/}{\scriptsize \par}
\begin{lyxcode}
{\scriptsize outline.txt~~~~-~书的设计}{\scriptsize \par}

{\scriptsize fossilbook.lyx~-~书本身}{\scriptsize \par}

{\scriptsize Layout}{\scriptsize \par}
\begin{lyxcode}
{\scriptsize fossil.png~~-~Fossil的logo~(标题页的图片)}{\scriptsize \par}
\end{lyxcode}
{\scriptsize Research}{\scriptsize \par}
\begin{lyxcode}
{\scriptsize fossilbib.bib~-~使用的参考文献}{\scriptsize \par}

{\scriptsize History}{\scriptsize \par}
\begin{lyxcode}
{\scriptsize CVC-grune.pdf~-~CVS的文献}{\scriptsize \par}

{\scriptsize RCS-A~System~for~Version~Control.webloc~-~RCS~书签}{\scriptsize \par}

{\scriptsize SCCS-Slideshow.pdf~-~SCCS的文献}{\scriptsize \par}

{\scriptsize VCSHistory~-pysync~...~.webloc~-~版本控制历史}{\scriptsize \par}
\end{lyxcode}
\end{lyxcode}
\end{lyxcode}
\end{lyxcode}
这本书一个小时前或者刚开始准备Research并建立一个框架，我今天要做的就是建立一个仓库并把所有这些文件都纳入Fossil的控制里。


\subsection{创建仓库}

我有一个叫做FOSSIL文件夹存放所有的代码仓库，Fossil不在乎但是我这么做的原因是我可以备份他们。首先，我需要为这本书新建一个仓库，可以在我移动到书的文件夹目录后使用下面的命令来实现。
\begin{lyxcode}
{\scriptsize }
\begin{figure}[H]
\begin{lyxcode}


{\scriptsize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~new~../FOSSIL/FossilBook.fossil}{\scriptsize \par}

{\scriptsize project-id:~2b0d35831c1a5b315d74c4fd8d532b100b822ad7}{\scriptsize \par}

{\scriptsize server-id:~~0149388e5a3109a867332dd8439ac7b454f3f9dd}{\scriptsize \par}

{\scriptsize admin-user:~jim~(initial~password~is~\textquotedbl{}}\textbf{\scriptsize ec3773}{\scriptsize \textquotedbl{})}{\scriptsize \par}
\end{lyxcode}
\caption{创建仓库\label{fig:Create-Repository}}


\end{figure}
{\scriptsize \par}
\end{lyxcode}
我创建了一个后缀为.fossil的仓库，这个当使用服务器时会很有用(见图解\vref{fig:server-detail})。在创建过程在他指派了一个管理员账户“Jim”及初始密码。  


\subsection{连接一个仓库}

仓库建好了，但是它是空的且与书的文件夹没有任何联系，下一步就是打开仓库到书的文件夹目录，使用命令\textbf{open}。

\begin{figure}[H]
\begin{lyxcode}
{\scriptsize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~open~../FOSSIL/FossilBook.fossil}{\scriptsize{}~}{\scriptsize \par}



{\scriptsize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~status}{\scriptsize \par}

{\scriptsize repository:~~~/Users/jschimpf/Public/FOSSIL/FossilBook.fossil}{\scriptsize \par}

{\scriptsize local-root:~~~/Users/jschimpf/Public/FossilBook/}{\scriptsize \par}

{\scriptsize server-code:~~0149388e5a3109a867332dd8439ac7b454f3f9dd}{\scriptsize \par}

{\scriptsize checkout:~~~~~279dfecd3f0322f236a92a9a8f3c96acf327d8c1~2010-04-25~12:40:39~UTC}{\scriptsize \par}

{\scriptsize tags:~~~~~~~~~trunk}{\scriptsize \par}



{\scriptsize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~extra}{\scriptsize \par}

{\scriptsize Layout/fossil.png}{\scriptsize \par}

{\scriptsize Research/History/CVS-grune.pdf}{\scriptsize \par}

{\scriptsize Research/History/RCS\textemdash{}A~System~for~Version~Control.webloc}{\scriptsize \par}

{\scriptsize Research/History/SCCS-Slideshow.pdf}{\scriptsize \par}

{\scriptsize Research/History/VCSHistory~-~pysync~-~....webloc}{\scriptsize \par}

{\scriptsize Research/fossilbib.bib}{\scriptsize \par}

{\scriptsize fossilbook.lyx}{\scriptsize \par}

{\scriptsize outline.txt}{\scriptsize \par}
\end{lyxcode}
\caption{打开仓库 \& 检查}


\end{figure}


\textbf{open} 命令好像什么也没有做，当执行检查命令\textbf{status}后，显示了仓库的信息，我们已经将文件夹目录挂载到了存储的主线。

命令\textbf{extra}显示了文件夹内所有没有在Fossil控制下的文件，目前我们还没有检入任何东西。


\subsection{增加和初始提交}

我比如使用\textbf{add}命令将所有有用的文件增加到仓库离去。Fossil将自动递归地添加，所以如果我增加顶级目录的文件，那么它递归地进入子文件夹比如Layout和Research目录并将其中的文件也增加到仓库里去。在你执行Add时它会整理你的文件夹目录所以你不会意外地添加了一堆临时文件（例如编译出来的Obj文件）。以后你可以很简单地删除它们但是在动手前的整理工作将会节省掉你的一些工作。

\begin{figure}[H]
\begin{lyxcode}
{\scriptsize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~add~.}{\scriptsize \par}

{\scriptsize ADDED~~Layout/fossil.png}{\scriptsize \par}

{\scriptsize ADDED~~Research/History/CVS-grune.pdf}{\scriptsize \par}

{\scriptsize ADDED~~Research/History/RCS\textemdash{}A~System~for~Version~Control.webloc}{\scriptsize \par}

{\scriptsize ADDED~~Research/History/SCCS-Slideshow.pdf}{\scriptsize \par}

{\scriptsize ADDED~~Research/History/VCSHistory~-~pysync~....webloc}{\scriptsize \par}

{\scriptsize ADDED~~Research/fossilbib.bib}{\scriptsize \par}

{\scriptsize fossil:~cannot~add~\_FOSSIL\_}{\scriptsize \par}

{\scriptsize ADDED~~fossilbook.lyx}{\scriptsize \par}

{\scriptsize ADDED~~outline.txt}{\scriptsize \par}
\end{lyxcode}
\caption{初始文件添加}
\end{figure}


我简单地告诉Fossil添加当前文件夹(.)那么它添加所有的文件以及所有的子文件夹的文件。注意\_FOSSIL\_文件不会被添加进去。这个是标志文件那么Fossil就会知道这个文件夹属于哪个仓库。Fossil不会加载这个文件直到需要管理它时，但是其余的都会添加。

今天我要做的最后一件事是添加这些文件或者当我提交时添加进去，这一步必要要做。然后让Fossil去管理这些事情，我们就可以放轻松了。 

\begin{figure}[H]
\begin{lyxcode}
{\scriptsize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~commit~-m~\textquotedbl{}Initial~Commit\textquotedbl{}}{\scriptsize \par}

{\scriptsize New\_Version:~8fa070818679e1744374bc5302a621490276d739}{\scriptsize \par}
\end{lyxcode}
\caption{初始提交}


\end{figure}


我添加了一个备注，一直这样做是一个很好的主意。以后当我们查看这些提交的时间轴时我们就知道我们到底做了些什么事情。


\subsection{Fossil开始使用概要}
\begin{itemize}
\item \textbf{fossil new <name> }创建一个新的Fossil仓库
\item \textbf{fossil open <repository> }当在一个源代码文件夹时连接这个文件到Fossil仓库
\item \textbf{fossil add .} 将会添加(递归地)当前文件夹及子目录下所有的文件到仓库里
\item \textbf{fossil addremove} 将会(递归地)添加任何当前工作目录下的文件或者是删除任何当前工作目录下的文件
\item \textbf{fossil commit -m ``Initial Commit''} 将会提交所有已添加的文件到仓库里去
\end{itemize}

\section{设置用户界面}

Fossil的一个令人惊讶的功能是网站服务器。它使你可以在不用任何操作系统特殊配置的情况下拥有一个GUI类型的用户界面，它呈现在你操作系统的网页浏览器内。在上一步中我将项目检入了一个Fossil仓库，下面我将准备一个网页界面来支持生产。
\begin{description}
\item [{注意:}] Fossil使用8080替代默认的的80标准端口作为所有HTTP连接的端口。运行后它将自动地启动你的浏览器并打开仓库的主页。不幸的是我的这个书所用的系统已经被Apache占用了8080端口，所以我使用8081端口。我将一直添加一个额外的参数来运行UI命令。
\end{description}
\begin{figure}[H]
\begin{lyxcode}
{\footnotesize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\footnotesize fossil~ui~-port~8081}{\footnotesize \par}
\end{lyxcode}
\caption{\label{fig:Starting-Webserver}开启网站服务器}
\end{figure}

\begin{description}
\item [{注意:}] 新版本的Fossil会自动找到一个可用的端口并告诉你它所使用的端口号。你任然可以使用 -port 参数来控制这个端口 \#。
\end{description}
这里你可以看到他如何启动，你也可以看到我选用了8081端口，因为你我的8080端口被锁定了。当我运行命令后我的浏览器启动了并看到如下主页。

\begin{figure}[H]
\noindent \begin{raggedright}
\includegraphics[scale=0.5]{Images/Single_user/initial_page}
\par\end{raggedright}

\caption{\label{fig:Initial-Webserver-page}初始化网页服务器页面}


\end{figure}


遵循该页面的建议，我跳转到\textbf{setup/config}页面。我将会进行最小的设置而你可以对真个项目进行设置。当你对Fossil足够熟悉后，你可能会设置越来越多的选项以适合你的胃口，但是下面的事情是你必须要做的 。

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/config_initial}

\caption{\label{fig:Initial-Configuration}初始化配置}


\end{figure}


我输入了一个项目的名称以及相关描述，项目的名称同样会被用来初始化Wiki页面的名称 (see \vref{sub:Wiki-Use}) 而描述对于其它人来说可以告诉他们你在这里做什么。然后我点击页面的底部 \textbf{应用修改}按钮。

下一步我点击了Admin面板(你可以在页面头部找到它)并点击了该页面的用户表单，我呈现在用户里并可以使用这个账户设置项目的密码。

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/user_config}

\caption{\label{fig:User-Configuration}用户配置}


\end{figure}


如图Fossil自动配置了一些用户除了项目的创建者。如你所见匿名用户可以在Fossil的网站下载代码。这个用户可以查看获取代码但是无法提交代码。在页面的右侧有很多选项，你可以给一个用户相应权限，当你设置你仓库时认真阅读它们会很有价值。重要是我(Jim)权限是“s”就是超级用户权限。这意味着我可以对这个仓库做任何事情。

我将会编辑用户Jim以保障该账户拥有所有我想要的权限。这里你必须设置密码。还记得你初始化仓库时系统给你自动指派的密码么(图解\vref{fig:Create-Repository}), 把它改成一个你可以记得住的密码很有必要而不是使用那个初始密码。

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/jim_setup}

\caption{超级用户设置}


\end{figure}


我输入了我的联系信息（电子邮箱地址）和一个我可以记得住的密码，当然你无法看到它。然后点击了应用修改。

现在仓库已经准备好进行下一步的工作了，它仅是一个必要的准系统但是最重要的事情已经设置完成了。


\subsection{用户界面概要}
\begin{itemize}
\item \textbf{fossil ui} 在源代码目录里运行将会启动基于浏览器的Fossil用户界面
\item \textbf{fossil ui -port <IP port \#>} 可以在8080端口被占用是指定一个端口
\item 第一次运行时设置项目名称和密码是很重要的
\end{itemize}

\section{更新仓库}

在写本书上面章节的时候我已经创建了一堆新文件且一些已经在仓库里的文件进行了修改。在结束今天的工作前，我应该将新文件添加到仓库里且将更改提交到仓库以保存这个项目的里程碑。

\begin{figure}[H]
\begin{lyxcode}
{\scriptsize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~extra}{\scriptsize \par}

{\scriptsize \#fossilbook.lyx\#}{\scriptsize \par}

{\scriptsize Images/Single\_user/config\_initial.epsf}{\scriptsize \par}

{\scriptsize Images/Single\_user/initial\_page.epsf}{\scriptsize \par}

{\scriptsize Images/Single\_user/jim\_setup.epsf}{\scriptsize \par}

{\scriptsize Images/Single\_user/user\_config.epsf}{\scriptsize \par}

{\scriptsize fossilbook.lyx\textasciitilde{}}{\scriptsize \par}



{\scriptsize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~status}{\scriptsize \par}

{\scriptsize repository:~~~/Users/jschimpf/Public/FOSSIL/FossilBook.fossil}{\scriptsize \par}

{\scriptsize local-root:~~~/Users/jschimpf/Public/FossilBook/}{\scriptsize \par}

{\scriptsize server-code:~~0149388e5a3109a867332dd8439ac7b454f3f9dd}{\scriptsize \par}

{\scriptsize checkout:~~~~~8fa070818679e1744374bc5302a621490276d739~2010-04-25~13:09:02~UTC}{\scriptsize \par}

{\scriptsize parent:~~~~~~~279dfecd3f0322f236a92a9a8f3c96acf327d8c1~2010-04-25~12:40:39~UTC}{\scriptsize \par}

{\scriptsize tags:~~~~~~~~~trunk}{\scriptsize \par}

{\scriptsize EDITED~~~~~fossilbook.lyx}{\scriptsize \par}


\end{lyxcode}
\caption{项目状态}


\end{figure}


我运行了\textbf{fossil extra}命令查看这些新文件。我想要增加那些图片文件(在文件夹: Images/Single\_user)以及另外二个文件\#fossilbook.lyx\# 和 fossilbook.lyx\textasciitilde{}，而不想增加\LyX{}的临时文件。我可以运行\textbf{fossil status}命令。该命令显示了所有已经在仓库里的文件。发生变化的文件只有文本文件 \textbf{fossilbook.lyx}.

我现在要做的就是增加那些图片到仓库再提交变更到仓库，然后我就可以继续我今天要做的其它任务了。

\begin{figure}[H]
\begin{lyxcode}
{\scriptsize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~add~Images}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/config\_initial.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/initial\_page.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/jim\_setup.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/user\_config.epsf}{\scriptsize \par}



{\scriptsize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~commit~-m~\textquotedbl{}Initial~setup~with~pictures\textquotedbl{}}{\scriptsize \par}

{\scriptsize New\_Version:~a2d12bf532a089ee53578e3e17c6e732c0442f49}{\scriptsize \par}
\end{lyxcode}
\caption{\label{fig:Update-for-new}更新新文件}


\end{figure}


在完成这个提交后我可以开启Fossil的UI(见图示\vref{fig:Starting-Webserver})并点击Fossil UI顶部的Timeline检查项目的时间线。如下图所示：

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/timeline}
\caption{时间线}


\end{figure}


你可以看到目前为止所有的检入操作，你还可以看到图示\vref{fig:Update-for-new}后的检入记录。我做了另外一个检入因为我在大纲部分丢失了部分修订。检入记录被十位的哈希数字备注且其是一个你可以点击查看详细版本变更信息的动态链接。 

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/timeline_detail}

\caption{时间线细节\label{fig:Timeline-Detail}}
\end{figure}


我点击了最新的检入操作的链接(那个\textbf{LEAF) }后显示如上图。在这里你还可以做很多事情。从变更的文件清单你可以点击Diff链接查看那个特别文件所发生的变化。``其它链接''行里有一个非常有用的压缩存档。点击后将会从你的浏览器下载该版本的压缩文件。你会发现这在你想要获得某个特定版本时变得非常有用，事实上这个就是你用来从\url{http://www.fossil-scm.org/}获取最新版Fossil的普通方式。编辑连接在后面可以用来编辑一个Leaf。 

\subsection{更新概要}
\begin{itemize}
\item \textbf{fossil status}和\textbf{fossil extra}会告诉你没有提交前已经变更的文件和不在仓库里的文件
\item \textbf{fossil commit - m ``Commit comment'' }提交一个变更（或者多个变更），添加一个有含义的备注非常重要
\end{itemize}

\section{Ticket-标签}

除了管理你的代码之外Fossil还有一个问题追踪系统。这意味着你可以为一个问题或者你打算在你的系统中添加的新功能创建一个标签用来跟踪你的处理流程，当然你还可以绑定标签到你的特定的检入操作。对于软件来说修复BUG和增加功能时这个会非常有用。例如你可以在标签清单中查看BUG清单，然后注明这个BUG由你来修复它，这样你就很清楚你到底做什么，而不会被其它的变更搞得摸不着头脑。

当你点选了标签后会显示如下窗口，你可以新建一个标签，查看标签清单，或者生成一个新的报告。为什么保障简单，我现在开始只使用所有标签。

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/ticket_initial}
\caption{初始化标签窗口}
\end{figure}

点选“新标签”后我如下填写这个表单：

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/ticket_form}
\caption{标签表单}
\end{figure}


事实上非常简单，这里你可以随意输入或多或少的内容，但是请记住这个东西至少会存在六周甚至是六个月之后，所以想象一下那时你会想要从这个表单里知道些什么（尽量多写写内容吧）。当我点击提交后如下图显示：

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/ticket_submit}
\caption{查看一个标签}
\end{figure}

最后点击标签然后“所有标签”就可以看到我的新标签以一个特别的颜色显示在标签清单里了。

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/ticket_list}
\caption{\label{fig:viewticket}打开标签后的标签清单}

\end{figure}

我尝试，在处理标签时，使得标签指向或者链接到提交，且从提交可以回溯到标签。这个方式可以从标签查看以发生的变更或者从时间线我可以查看标签及其解决方案。为了达到此效果我将保证在使用Check-In（检入）的备注时时将从对应标签的十位哈希值输入进去并且在Ticket（标签）的解决问题处连接到对应的Check-In（检入）。

当我正在写这个章节并把所有的图片加入时，所要做的是增加所有的新图片到仓库并在另外一个完成的操作中进行检查。我所做的如下图所示:

\begin{figure}[H]
\begin{lyxcode}
{\scriptsize Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~add~Images/Single\_user}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/config\_initial.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/initial\_page.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/jim\_setup.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/ticket\_form.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/ticket\_initial.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/ticket\_list.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/ticket\_submit.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/timeline.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/timeline\_detail.epsf}{\scriptsize \par}

{\scriptsize ADDED~~Images/Single\_user/user\_config.epsf}{\scriptsize \par}



{\scriptsize {[}Pandora-2:jschimpf/Public/FossilBook{]}~jim\%~}\textbf{\scriptsize fossil~commit~-m~\textquotedbl{}{[}1665c78d94{]}~Ticket~Use\textquotedbl{}}{\scriptsize \par}
\end{lyxcode}
\caption{\label{fig:checkin}检入解决问题的标签}


\end{figure}


第一步我将所有的新图片全部进行Add操作。我很懒，只是告诉程序将目录Single\_user directory下的所有文件加入仓库。我之前已经增加过的那些如 \textbf{config\_initial.epsf}但是Fossil很聪明，它知道不需要将它们添加第二次。尽管它们显示在已添加的条目里，但是实际上它们并未添加进去。

提交的那行命令非常关键，如你所见我在备注里方括号输入了标签的十位哈希值。我们将在Wiki章节看到这个是一个关联到Ticket标签的链接，所以当我们查看时间线内的备注时或者任何其它你可以点击相应括号跳转到对应的标签。

现在我已经将文件检入了，且到了不得不关闭标签的时候。我通过点击标签清单里的相应链接，页面将会跳转到标签窗口如图所示\vref{fig:viewticket}。从那里我选择编辑并添加如下信息：

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/ticket_done}

\caption{完成Ticket标签}


\end{figure}


我将它标记为“关闭”。如果你有相关状态代码你可以标记为修复、测试或者其它很多选择。另外一个非常重要的步骤，我提出了时间线并复制了提交（见：\vref{fig:checkin}）相关的链接。这样做了后我的标签现在可以链接到提交且提交也可以追溯到对应的标签。


\subsection{Ticket-标签概要}
\begin{itemize}
\item Ticket标签对于提醒你需要做什么或者修复BUG来说是一个非常有用的方式
\item 当你提交一个变更时，将方括号括住的标签十位哈希值包含在提交的备注里比如{[}<10位哈希值>{]}，这样你就可以将其连接到对应的标签。
\item 当你关闭标签时，输入哈希值以表示你已经完成对于的标签所描述的问题
\end{itemize}

\section{\label{sub:Wiki-Use}Wiki的使用}

如图解\vref{fig:Starting-Webserver}Fossil有一个基于浏览器的用户界面。该界面还附加的是，它内建了一个可以添加页面的Wiki系统。她允许你增加代码描述，用户手册或者其它文档。Fossil将它们保存在版本控制下的一个位置。一个Wiki是一个完整的网站，你可以在浏览器中添加页面和超链接。你有一个初始化的也面，然后你可以输入{[}newpage{]}，这个文本可以链接到一个地址且如果点击的话可以带你到一个新建的空白页面。记住图解\vref{fig:Initial-Webserver-page}中是你项目的一个初始页面，在这里你可以添加新页面。这些页面被Fossil自动纳入版本控制，而你不需要添加或者提交。

一旦我完成仓库的设置(见图解\vref{fig:Initial-Configuration})，主页会变成如下图所示：

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/wiki_blankhome}

\caption{空白的主页}


\end{figure}


现在还不是非常有用吧，所以在这个章节的剩余部分我将使用Fossil的Wiki函数使得它变得有用起来。如果我从菜单栏处点选了Wiki的对象我会看到如下所示：

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/wiki_page}

\caption{\label{fig:Wiki-controls}Wiki控制}


\end{figure}


这些就是可以让你控制和修改Wiki的控制选项。目前来说最重要的是格式化规则链接。这个链接将带你到关于如何格式化你的Wiki版面的描述页面。如果你在页面里仅输入文本它将会显示，但是会被你的浏览器格式化。你可以输入HTML命令来控制格式化。花点时间仔细阅读这个页面并了解什么可以做什么不可以做是非常有价值的。这个页面列出了有效的HTML命令，如果你不知道他们的意思，我建议你看看这个链接 \url{http://www.webmonkey.com/2010/02/html\_cheatsheet/}并将它保存在你是手边。 

除了非常有用的HTML标记以外，Wiki语法{[}page{]}非常有用，它可以链接到一个新的页面。这就是你如何添加新页面或者说是你如何为你的仓库添加基于网站的文档的方式。

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/wiki_formating}\caption{Wiki格式化}


\end{figure}


我现在开始工作。我想要做的是修改首页并添加一个可以链接到本书PDF格式的超级链接。在图示\vref{fig:Wiki-controls}我点击第一个对象， FossilBook的主页。它又把我带到了主页但是现在多了一个编辑选项。同时还有一个历史选项，这样我就可以查看这个页面的历史版本了。
\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/wiki_homeedit}

\caption{可编辑的主页}


\end{figure}


如下显示的是我的初始编辑及其预览:

\begin{figure}[H]
\includegraphics[scale=0.5]{Images/Single_user/wiki_home}

\caption{初始的主页}


\end{figure}


底部是一个编辑窗口，我可以在这里输入我想要显示的东西。上面的预览显示是这个页面将要显示的样子。如你所见我输入了一些简单的HTML标签来使得标题大一些并且居中。我刚刚输入的文体部分可以看到会自动适应到浏览器的窗口。你可以通过输入空白行来使用使用多个段落。下一步我想要一个列表，可以使用输入2个空格，一个'{*}'然后再是二个空格。我给每一行都添加到了一个新的页面（还没有添加的页面）。如果你看到我在表单里输入了{[} <new page> | <title> {]}。这样我可以用很长的字符来描述那个连接但是却有个短的页面名称(没有嵌入的字符串)。 

在这里我经常犯的一个错误是点击新连接，它把我带到一个新的空白页面。\textbf{糟糕}，如果我还没有保存这个页面会发现我丢失了所有我之前的修改。

好吧，我将先保存我的修改然后再跳转到新的页面。这里我在做一些难以理解的事情，第一个链接连接到PDF，这是一个在仓库内的文件。\LyX{}程序会创建这个PDF。我这么做，然后保存，并将它添加到仓库里。但是我不想链接到一个静态文件，而一直都是最新版本的PDF，那个我每天完成工作的版本。要这样做可以如下文代码来实现：
\begin{lyxcode}
{[}http:doc/tip/FossilBook.pdf~|~Book~(pdf)~{]}
\end{lyxcode}
这是一个特殊的链接，Fossil wiki可以理解\textbf{doc }是表示这个是一个文档。\textbf{tip }是意思是使用最新的当前版本；你可以添加一个版本号在这里。最后一旦我想要将书的PDF放顶部，我所需要的只是文件名称。如果它在一个子目录里，我可以这样写\textbf{doc/tip/subdir/filename}。

第二个链接只是常规的链接，我可以像我编辑主页的时候的方式来编辑它。


\subsection{Wiki概要}
\begin{itemize}
\item 使用HTML格式化你的文本,如<h1>标题</h1>用于页面头部
\item 创建并链接页面，使用{[} <page> | <Link text> {]}
\item 页面指定http:doc/tip/<仓库里的文档路径>将显示任何你浏览器可以处理的的文档（例如：pdf，http）
\item 不要点击任何链接，除非你已经保存了当前页面
\end{itemize}
